/**
 * 访问日志记录中间件
 * 用户访问时间、
 * 访问路径、
 * 访问请求类型、
 * 访问的浏览器头信息、
 * 访问者IP地址
 */
const path = require('path')
const fs = require('fs')
const moment = require('moment')
const logger = (req, res, next) => {
  // console.log(req.headers.host)
  // 1、获取请求参数信息
  // 时间数据  js获取时间戳  2022-10-13 09:36:56
  const time = moment().format('YYYY-MM-DD HH:mm:ss')
  // 协议 protocol
  const protocol = req.protocol
  // 域名 端口
  // const host = req.hostname
  const host = req.headers.host
  // 访问路径
  const url = req.url
  // 访问请求类型
  const method = req.method
  // 访问的浏览器头信息
  const agent = req.headers['user-agent']
  // 访问者IP地址
  const ip = req.ip
  // 判断日志目录是否存在 如果不存在就创建文件夹
  // 路径写绝对路径 不管是在什么情况下，绝对路径都可以找到正确的路径
  let logDir = path.resolve('src', 'logs')
  // console.log(logDir)
  logDir = logDir.replace('\\src\\src\\logs', '\\src\\logs')
  // console.log(logDir)
  if (!fs.existsSync(logDir)) {
    fs.mkdirSync(logDir)
  }
  const logPath = path.join(logDir, moment().format('YYYYMMDD') + '.log')
  const log = `${time} ${ip} ${method} ${protocol}://${host}${url} [${agent}]\n`
  // console.log(log)
  fs.appendFile(logPath, log, (err) => {
    // console.log(err)
    // console.log(err['errno'])
    if (err === null) {
      return
    }
    if (err['errno'] == '-4058') {
      fs.mkdirSync('./logs')
    }
  })
  next()
}

module.exports = logger
